"""
    1.生成正态分布的一维数组B，数组长度40
    2.随机生成10*4的二维数组A，取值范围[0,100]
    3.将B修改成二维数组，4*10
    4.计算C=A*B，C的逆矩阵及行列式
    5.C的每一行最大值，返回位数数组，及[行（所在行），列（所在的行的索引）]
    6.二维数组C转成DataFrame，列名为A~J
    7.保存数据，为rand_num.csv
"""
import numpy as np
import pandas as pd


# ! 正态分布和均匀分布的区分

# todo 01
# * randn 用于正态分布 | rand 用于均匀分布
# ? 表示生成1维数组，数量40个
B = np.random.randn(1, 40)
# print(B)

# todo 02
# * randint是随机的取值范围，先列后行
A = [[np.random.randint(0, 100) for i in range(4)] for j in range(10)]
# print(A)

# todo 03
# ! 升维度 | 降维度
# ? 升维度reshape不改变原数组，resize改变原数组,4行10列
B2 = B.reshape((4, 10))
# print(B2)
# // 降维度
# // C = B2.swapaxes(1, 0)
# todo 04
# ! 行列相同 | 行或列某一样相同 | 行和列都不相同
# ? 行列相同 直接  A × B
# ? 行列某一样相同 np.dot(A × B)
# ? 行和列都不相同 ，（1）如果互为倒数，转置（2）若果不互为倒数
temp = B2.T
C = A*temp
# print(C)
# // 不互为倒数
# ! 逆矩阵 和 行列式
# C2 = np.linalg.det(A*temp)
# print(C2)

# todo 05
# ! 最大值 最小值 和 的数 axis=1表示行，axis=0表示列
# ! 最大值 最小值 和 索引axis=1表示行，axis=0表示列
D = np.max(C, axis=1)
# ? 位置（索引）
E = np.argmax(C, axis=1)
# print(D)
# print(E)
# * 计数的列表
tt = [i for i in range(1, 11)]
# * 将两个列表合并为一个二维数组
F = list(zip(tt, E))
# print(F)

# todo 06
# ? 二维数组转 DataFrame
G = (pd.DataFrame(F)).T
# print(G)
# ? 批量修改列名,行名
# * 批量生成A-J的列表，使用ASCII编码
G.columns = [chr(i) for i in range(65, 75)]
G.index = ['第几行', '所在位置']
# print(G)
# todo 导出
G.to_csv(r'.\Exercise\2021-01-13\01.csv', sep=',', index=True, header=True)
